home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / CIncludes / GXMath.h < prev    next >
C/C++ Source or Header  |  1996-05-01  |  7KB  |  237 lines

  1. /*
  2.      File:        GXMath.h
  3.  
  4.      Contains:    QuickDraw GX math routine interfaces.
  5.  
  6.      Version:    Technology:    Quickdraw GX 1.1
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __GXMATH__
  19. #define __GXMATH__
  20.  
  21. #ifndef __CONDITIONALMACROS__
  22. #include <ConditionalMacros.h>
  23. #endif
  24. #ifndef __TYPES__
  25. #include <Types.h>
  26. #endif
  27. #ifndef __FIXMATH__
  28. #include <FixMath.h>
  29. #endif
  30.  
  31. #ifdef __cplusplus
  32. extern "C" {
  33. #endif
  34.  
  35. #if PRAGMA_IMPORT_SUPPORTED
  36. #pragma import on
  37. #endif
  38.  
  39. #if PRAGMA_ALIGN_SUPPORTED
  40. #pragma options align=mac68k
  41. #endif
  42.  
  43. #if defined(__MWERKS__) && GENERATING68K
  44.     #pragma push
  45.     #pragma pointers_in_D0
  46. #endif
  47.  
  48. struct gxPoint {
  49.     Fixed                             x;
  50.     Fixed                             y;
  51. };
  52. typedef struct gxPoint gxPoint;
  53.  
  54. typedef unsigned short gxColorValue;
  55. struct gxPolar {
  56.     Fixed                             radius;
  57.     Fixed                             angle;
  58. };
  59. typedef struct gxPolar gxPolar;
  60.  
  61. struct gxMapping {
  62.     Fixed                             map[3][3];
  63. };
  64. typedef struct gxMapping gxMapping;
  65.  
  66. #define    gxColorValue1            ((gxColorValue) 0x0000FFFF)
  67. #define  gxPositiveInfinity        ((long) 0x7FFFFFFFL)
  68. #define    gxNegativeInfinity        ((long) 0x80000000L)
  69.  
  70.  
  71. #if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
  72. extern gxMapping *CopyToMapping(gxMapping *target, const gxMapping *source)
  73.  THREEWORDINLINE(0x303C, 0x0031, 0xA832);
  74.  
  75. extern gxMapping *InvertMapping(gxMapping *target, const gxMapping *source)
  76.  THREEWORDINLINE(0x303C, 0x0032, 0xA832);
  77.  
  78. extern gxMapping *MapMapping(gxMapping *target, const gxMapping *source)
  79.  THREEWORDINLINE(0x303C, 0x0033, 0xA832);
  80.  
  81. extern gxMapping *MoveMapping(gxMapping *target, Fixed hOffset, Fixed vOffset)
  82.  THREEWORDINLINE(0x303C, 0x0034, 0xA832);
  83.  
  84. extern gxMapping *MoveMappingTo(gxMapping *target, Fixed hPosition, Fixed vPosition)
  85.  THREEWORDINLINE(0x303C, 0x0035, 0xA832);
  86.  
  87. extern gxMapping *NormalizeMapping(gxMapping *target)
  88.  THREEWORDINLINE(0x303C, 0x0036, 0xA832);
  89.  
  90. extern gxMapping *RotateMapping(gxMapping *target, Fixed angle, Fixed xCenter, Fixed yCenter)
  91.  THREEWORDINLINE(0x303C, 0x0037, 0xA832);
  92.  
  93. extern gxMapping *ScaleMapping(gxMapping *target, Fixed hFactor, Fixed vFactor, Fixed xCenter, Fixed yCenter)
  94.  THREEWORDINLINE(0x303C, 0x0038, 0xA832);
  95.  
  96. extern gxMapping *ResetMapping(gxMapping *target)
  97.  THREEWORDINLINE(0x303C, 0x0039, 0xA832);
  98.  
  99. extern gxMapping *SkewMapping(gxMapping *target, Fixed skewX, Fixed skewY, Fixed xCenter, Fixed yCenter)
  100.  THREEWORDINLINE(0x303C, 0x003A, 0xA832);
  101.  
  102. extern void MapPoints(const gxMapping *source, long count, gxPoint vector[])
  103.  THREEWORDINLINE(0x303C, 0x003B, 0xA832);
  104.  
  105. extern short FirstBit(unsigned long x)
  106.  THREEWORDINLINE(0x303C, 0x003C, 0xA832);
  107.  
  108. extern short WideScale(const wide *source)
  109.  THREEWORDINLINE(0x303C, 0x003D, 0xA832);
  110.  
  111. extern short LinearRoot(Fixed first, Fixed last, Fract t[])
  112.  THREEWORDINLINE(0x303C, 0x003E, 0xA832);
  113.  
  114. extern short QuadraticRoot(Fixed first, Fixed control, Fixed last, Fract t[])
  115.  THREEWORDINLINE(0x303C, 0x003F, 0xA832);
  116.  
  117. extern gxPoint *PolarToPoint(const gxPolar *ra, gxPoint *xy)
  118.  THREEWORDINLINE(0x303C, 0x0040, 0xA832);
  119.  
  120. extern gxPolar *PointToPolar(const gxPoint *xy, gxPolar *ra)
  121.  THREEWORDINLINE(0x303C, 0x0041, 0xA832);
  122.  
  123. extern Fract FractCubeRoot(Fract source)
  124.  THREEWORDINLINE(0x303C, 0x0042, 0xA832);
  125.  
  126. extern Fract FractDivide(Fract dividend, Fract divisor)
  127.  THREEWORDINLINE(0x303C, 0x0043, 0xA832);
  128.  
  129. extern Fract FractMultiply(Fract multiplicand, Fract multiplier)
  130.  THREEWORDINLINE(0x303C, 0x0044, 0xA832);
  131.  
  132. extern Fract FractSineCosine(Fixed degrees, Fract *cosine)
  133.  THREEWORDINLINE(0x303C, 0x0045, 0xA832);
  134.  
  135. extern Fract FractSquareRoot(Fract source)
  136.  THREEWORDINLINE(0x303C, 0x0046, 0xA832);
  137.  
  138. extern Fixed FixedDivide(Fixed dividend, Fixed divisor)
  139.  THREEWORDINLINE(0x303C, 0x0047, 0xA832);
  140.  
  141. extern Fixed FixedMultiply(Fixed multiplicand, Fixed multiplier)
  142.  THREEWORDINLINE(0x303C, 0x0048, 0xA832);
  143.  
  144. /* This next call is (source * multiplier / divisor) -- it avoids underflow, overflow by using wides */
  145. extern long MultiplyDivide(long source, long multiplier, long divisor)
  146.  THREEWORDINLINE(0x303C, 0x0049, 0xA832);
  147.  
  148. extern unsigned long Magnitude(long deltaX, long deltaY)
  149.  THREEWORDINLINE(0x303C, 0x004A, 0xA832);
  150.  
  151. extern long VectorMultiplyDivide(long count, const long *vector1, long step1, const long *vector2, long step2, long divisor)
  152.  THREEWORDINLINE(0x303C, 0x004B, 0xA832);
  153.  
  154.  
  155.  
  156. /* wide operations are defined within FixMath.h only for PowerPC */
  157. #if !GENERATINGPOWERPC
  158. extern wide *WideAdd(wide *target, const wide *source)
  159.  THREEWORDINLINE(0x303C, 0x004C, 0xA832);
  160.  
  161. extern short WideCompare(const wide *target, const wide *source)
  162.  THREEWORDINLINE(0x303C, 0x004D, 0xA832);
  163.  
  164. extern wide *WideNegate(wide *target)
  165.  THREEWORDINLINE(0x303C, 0x004E, 0xA832);
  166.  
  167. extern wide *WideShift(wide *target, long shift)
  168.  THREEWORDINLINE(0x303C, 0x004F, 0xA832);
  169.  
  170. extern unsigned long WideSquareRoot(const wide *source)
  171.  THREEWORDINLINE(0x303C, 0x0050, 0xA832);
  172.  
  173. extern wide *WideSubtract(wide *target, const wide *source)
  174.  THREEWORDINLINE(0x303C, 0x0051, 0xA832);
  175.  
  176. extern wide *WideMultiply(long multiplicand, long multiplier, wide *target)
  177.  THREEWORDINLINE(0x303C, 0x0052, 0xA832);
  178.  
  179. /* returns the quotient */
  180. extern long WideDivide(const wide *dividend, long divisor, long *remainder)
  181.  THREEWORDINLINE(0x303C, 0x0053, 0xA832);
  182.  
  183. /* quotient replaces dividend */
  184. extern wide *WideWideDivide(wide *dividend, long divisor, long *remainder)
  185.  THREEWORDINLINE(0x303C, 0x0055, 0xA832);
  186.  
  187. #endif
  188.  
  189.  
  190. extern wide *VectorMultiply(long count, const long *vector1, long step1, const long *vector2, long step2, wide *dot)
  191.  THREEWORDINLINE(0x303C, 0x0054, 0xA832);
  192.  
  193. extern unsigned long RandomBits(long count, long focus)
  194.  THREEWORDINLINE(0x303C, 0x0056, 0xA832);
  195.  
  196. extern void SetRandomSeed(const wide *seed)
  197.  THREEWORDINLINE(0x303C, 0x0057, 0xA832);
  198.  
  199. extern wide *GetRandomSeed(wide *seed)
  200.  THREEWORDINLINE(0x303C, 0x0058, 0xA832);
  201.  
  202. #endif
  203. #define FixedRound(a)        ((short)((Fixed)(a) + fixed1/2 >> 16))
  204. #define FixedSquareRoot(a)    ((Fixed)FractSquareRoot(a) + 64 >> 7)
  205. #define FixedTruncate(a)        ((short)((Fixed)(a) >> 16))
  206. #define FixedToFract(a)        ((Fract)(a) << 14)
  207. #define FractToFixed(a)        ((Fixed)(a) + 8192L >> 14)
  208. #define FixedToInt(a)       ((short)((Fixed)(a) + fixed1/2 >> 16))
  209. #define IntToFixed(a)       ((Fixed)(a) << 16)
  210. #define FixedToFloat(a)     ((float)(a) / fixed1)
  211. #define FloatToFixed(a)         ((Fixed)((float)(a) * fixed1))
  212. #define FractToFloat(a)     ((float)(a) / fract1)
  213. #define FloatToFract(a)     ((Fract)((float)(a) * fract1))
  214. #define ColorToFract(a)     (((Fract) (a) << 14) + ((Fract)(a) + 2 >> 2))
  215. #define FractToColor(a)     ((gxColorValue) ((a) - ((a) >> 16) + 8191 >> 14))
  216. #define ff(a)               IntToFixed(a)
  217. #define fl(a)               FloatToFixed(a)
  218.  
  219. #if defined(__MWERKS__) && GENERATING68K
  220.     #pragma pop
  221. #endif
  222.  
  223. #if PRAGMA_ALIGN_SUPPORTED
  224. #pragma options align=reset
  225. #endif
  226.  
  227. #if PRAGMA_IMPORT_SUPPORTED
  228. #pragma import off
  229. #endif
  230.  
  231. #ifdef __cplusplus
  232. }
  233. #endif
  234.  
  235. #endif /* __GXMATH__ */
  236.  
  237.